package User;

import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 记分板类，用于管理用户的分数并存储到文件。
 */
public class ScoreBoard {
    private static final String SCORES_FILE_PATH = "scores.txt"; // 存储分数的文件路径
    private Map<String, Integer> scores; // 使用HashMap存储所有用户的分数

    /**
     * 构造函数，初始化分数映射并从文件加载分数。
     */
    public ScoreBoard() {
        scores = new HashMap<>();
        loadScores(); // 在构造函数中加载分数
    }

    /**
     * 添加或更新用户的分数。
     * @param username 用户名
     * @param score 用户分数
     */
    public void addScore(String username, int score) {
        scores.put(username, Math.max(scores.getOrDefault(username, 0), score)); // 更新分数为当前分数和新分数中的较高值
        saveScores(); // 更新分数后立即保存
    }

    /**
     * 获取用户的分数。
     * @param username 用户名
     * @return 用户的分数，如果用户不存在则返回null
     */
    public Integer getScore(String username) {
        return scores.get(username);
    }

    /**
     * 获取所有用户的用户名集合。
     * @return 用户名集合
     */
    public Set<String> getNames() {
        return scores.keySet();
    }

    /**
     * 在控制台上显示所有用户的分数。
     */
//    public void displayScores() {
//        scores.forEach((username, score) -> System.out.println(username + ": " + score));
//    }

    /**
     * 将分数保存到文件。
     */
    public void saveScores() {
        try (FileWriter writer = new FileWriter(SCORES_FILE_PATH, false)) { // 使用try-with-resources自动关闭资源
            scores.forEach((username, score) -> {
                try {
                    writer.write(username + " " + score + "\n"); // 将用户名和分数写入文件，每个用户占一行
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 从文件中加载分数到HashMap。
     */
    public void loadScores() {
        try {
            java.util.Scanner scanner = new java.util.Scanner(new java.io.File(SCORES_FILE_PATH));
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                String[] parts = line.split(" "); // 按空格分割每一行
                if (parts.length == 2) {
                    scores.put(parts[0], Integer.parseInt(parts[1])); // 将分数添加到HashMap
                }
            }
            scanner.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}